//package com.hd.json2mysql.service;
//
//import com.fasterxml.jackson.databind.JsonNode;
//import com.fasterxml.jackson.databind.node.ObjectNode;
//import com.hd.json2mysql.entity.Classes;
//import com.hd.json2mysql.enums.ClassType;
//import com.hd.json2mysql.mapper.CodeAnalysisMapper;
//import com.hd.json2mysql.utils.IdGenerator;
//import com.hd.json2mysql.utils.JsonReader;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//@Service
//public class ClassesService {
//
//    @Autowired
//    CodeAnalysisMapper codeAnalysisMapper;
//
//    // 类与子元素的ID映射缓存
//    private final Map<String, String> classIdMap = new HashMap<>();
//    private final Map<String, String> functionIdMap = new HashMap<>();
//
//    public void insertClass(String path) {
//        try {
//            JsonNode jsonNode = JsonReader.readJson(path);
//
//            if (jsonNode.isObject()) {
//                ObjectNode objectNode = (ObjectNode) jsonNode;
//
//                // 递归处理所有子节点
//                objectNode.fields().forEachRemaining(entry -> {
//                    removePositionFields(entry.getValue());
//                });
//            } else if (jsonNode.isArray()) {
//                // 处理数组中的每个元素
//                for (JsonNode arrayElement : node) {
//                    removePositionFields(arrayElement);
//                }
//            }
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    public void fullProcess() {
//
//    }
//
//    private void processClass(Map<String, Object> classNode) {
//        // 1. 存储类基本信息
//        String classId = storeClass(classNode);
//
//        // 2. 存储字段及字段注解
//        storeFields(classId, (List<Map<String, Object>>) classNode.get("Fields"));
//
//        // 3. 存储方法及其关联数据
//        storeMethods(classId, (List<Map<String, Object>>) classNode.get("Functions"));
//
//        // 4. 存储类级别注解
//        storeAnnotations(classId, "CLASS", (List<Map<String, Object>>) classNode.get("Annotations"));
//
//        // 5. 存储导入声明
//        storeImports(classId, (List<Map<String, Object>>) classNode.get("Imports"));
//
//        // 6. 存储实现接口
//        storeImplements(classId, (List<String>) classNode.get("Implements"));
//    }
//
//    private String storeClass(ObjectNode classNode) {
//
//        Classes classes = new Classes();
//
//        String classId = IdGenerator.generate32Id();
//
//        classes.setId(classId);
//        classes.setNodeName(String.valueOf(classNode.get("NodeName")));
//        classes.setModule(String.valueOf(classNode.get("Module")));
//        classes.setType(ClassType.valueOf(String.valueOf(classNode.get("Type"))));
//        classes.setPackageName(String.valueOf(classNode.get("Package")));
//        classes.setFilePath(String.valueOf(classNode.get("FilePath")));
//        // 其他字段转换...
//        classes.setStartLine(classNode.get("Position").get("StartLine").asInt());
//        classes.setEndLine(classNode.get("Position").get("StopLine").asInt());
//        codeAnalysisMapper.insertClass(classes);
//        classIdMap.put(String.valueOf(classNode.get("NodeName")), classId);
//        return classId;
//    }
//
//    private void storeFields(String classId, List<Map<String, Object>> fields) {
//        fields.forEach(field -> {
//            String fieldId = IdGenerator.generate32Id();
//            Map<String, Object> fieldData = new HashMap<>();
//            fieldData.put("id", fieldId);
//            fieldData.put("classId", classId);
//            fieldData.put("typeType", field.get("TypeType"));
//            // 其他字段处理...
//
//            mapper.insertField(fieldData);
//
//            // 处理字段注解
//            storeAnnotations(fieldId, "FIELD",
//                    (List<Map<String, Object>>) field.get("Annotations"));
//        });
//    }
//
//    private void storeMethods(String classId, List<Map<String, Object>> methods) {
//        methods.forEach(method -> {
//            String methodId = IdGenerator.generate32Id();
//            methodIdMap.put((String) method.get("Name"), methodId);
//
//            Map<String, Object> methodData = new HashMap<>();
//            methodData.put("id", methodId);
//            methodData.put("classId", classId);
//            methodData.put("name", method.get("Name"));
//            // 其他方法属性处理...
//
//            mapper.insertMethod(methodData);
//
//            // 处理方法参数
//            storeParameters(methodId,
//                    (List<Map<String, Object>>) method.get("Parameters"));
//
//            // 处理函数调用
//            storeFunctionCalls(methodId,
//                    (List<Map<String, Object>>) method.get("FunctionCalls"));
//
//            // 处理方法注解
//            storeAnnotations(methodId, "FUNCTION",
//                    (List<Map<String, Object>>) method.get("Annotations"));
//        });
//    }
//
//    private void storeFunctionCalls(String methodId, List<Map<String, Object>> calls) {
//        List<Map<String, Object>> callData = new ArrayList<>();
//        for (int i = 0; i < calls.size(); i++) {
//            Map<String, Object> call = calls.get(i);
//            Map<String, Object> callRecord = new HashMap<>();
//            callRecord.put("id", IdGenerator.generate32Id());
//            callRecord.put("functionId", methodId);
//            callRecord.put("packageName", call.get("Package"));
//            callRecord.put("callOrder", i + 1);
//            // 其他调用信息处理...
//
//            callData.add(callRecord);
//        }
//        mapper.batchInsertFunctionCalls(callData);
//    }
//}
